#ifndef COMPAS_H
#define COMPAS_H

#include <QSharedDataPointer>
#include <QSharedData>
#include <QVariant>
#include <QList>
#include "notacompas.h"
#include "datos.h"

class d_Compas : public QSharedData
{
public:
    d_Compas() { numeroPulsos = 4; }
    QString nombre;
    int numeroPulsos;
    QList<NotaCompas> listaNotas;
};

class Compas : public Datos
{
public:
	Compas();
    Compas(const Compas& compas);
	~Compas();

    Compas(const Compas& compas1, const Compas& compas2);

    bool esValido() { return !d->nombre.isEmpty() || !d->listaNotas.isEmpty(); }

	QString getNombre() const { return d->nombre; }
	void setNombre(QString nombre) { d->nombre = nombre; }

	int getNumeroPulsos() const { return d->numeroPulsos; }
	void setNumeroPulsos(int numeroPulsos) { d->numeroPulsos = numeroPulsos; }

	int getNumeroNotas() const { return d->listaNotas.size(); }
	NotaCompas getNota(int indice) const { return d->listaNotas.at(indice); }

	QList<NotaCompas> getListaNotas() const { return d->listaNotas; }
	void setListaNotas(const QList<NotaCompas>& listaNotas);

	// Iterfaz Datos
	QVariant get(const QString& nombreAtributo) const;
    int getAncho(const QString& nombreAtributo) const;

    void serializar(QDomElement& elemento) const;
    void deserializar(const QDomElement& elemento);

    void ordenarNotas();

private:
    QSharedDataPointer<d_Compas> d;
};

#endif // COMPAS_H
